{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-retention-web",
      "artifactVersion": "2023.4.11",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-retention-web",
          "org.nuxeo.retention.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.retention",
        "id": "grp:org.nuxeo.retention",
        "name": "org.nuxeo.retention",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
            "digest": "34dbcd043cd41c527a2929521f1fa815",
            "encoding": "UTF-8",
            "length": 6308,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.25"
      },
      "bundleId": "nuxeo-retention-web",
      "components": [],
      "fileName": "nuxeo-retention-web-2023.4.11.jar",
      "groupId": "org.nuxeo.retention",
      "hierarchyPath": "/grp:org.nuxeo.retention/nuxeo-retention-web",
      "id": "nuxeo-retention-web",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.9.6\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.12\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-retention-web\r\nBundle-SymbolicName: nuxeo-retention-web;singleton=true\r\n\r\n",
      "packages": [
        "nuxeo-retention"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
        "digest": "34dbcd043cd41c527a2929521f1fa815",
        "encoding": "UTF-8",
        "length": 6308,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.4.11"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-retention",
      "artifactVersion": "2023.4.11",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-retention-web",
          "org.nuxeo.retention.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.retention",
        "id": "grp:org.nuxeo.retention",
        "name": "org.nuxeo.retention",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
            "digest": "34dbcd043cd41c527a2929521f1fa815",
            "encoding": "UTF-8",
            "length": 6308,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.25"
      },
      "bundleId": "org.nuxeo.retention.core",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types/Contributions/org.nuxeo.retention.types--schema",
              "id": "org.nuxeo.retention.types--schema",
              "registrationOrder": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"retention_rule\" prefix=\"retention_rule\" src=\"schemas/retention_rule.xsd\"/>\n    <schema name=\"retention_definition\" prefix=\"retention_def\" src=\"schemas/retention_definition.xsd\"/>\n    <schema name=\"record\" prefix=\"record\" src=\"schemas/record.xsd\"/>\n    <schema name=\"retention_search\" prefix=\"retention_search\" src=\"schemas/retention_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types/Contributions/org.nuxeo.retention.types--doctype",
              "id": "org.nuxeo.retention.types--doctype",
              "registrationOrder": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"SavedSearch\" name=\"RetentionSearch\">\n      <facet name=\"ContentViewDisplay\"/>\n      <schema name=\"retention_search\"/>\n    </doctype>\n\n    <facet name=\"RetentionRule\" perDocumentQuery=\"false\">\n      <schema name=\"retention_rule\"/>\n      <schema name=\"retention_definition\"/>\n    </facet>\n\n    <facet name=\"Record\">\n      <schema name=\"record\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"RetentionRule\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <facet name=\"NXTag\"/>\n      <facet name=\"RetentionRule\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n    <doctype extends=\"OrderedFolder\" name=\"RetentionRules\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>RetentionRule</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types/Contributions/org.nuxeo.retention.types--types",
              "id": "org.nuxeo.retention.types--types",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n    <type id=\"RetentionRules\">\n      <label>Retention Rules</label>\n      <icon>/icons/ordered_folder.png</icon>\n      <bigIcon>/icons/ordered_folder_100.png</bigIcon>\n    </type>\n    <type id=\"RetentionRule\">\n      <label>Retention Rules</label>\n      <icon>/icons/retention_rule.png</icon>\n      <bigIcon>/icons/retention_rule.png</bigIcon>\n    </type>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types",
          "name": "org.nuxeo.retention.types",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 728,
          "services": [],
          "startOrder": 721,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.types\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"retention_rule\" src=\"schemas/retention_rule.xsd\"\n      prefix=\"retention_rule\" />\n    <schema name=\"retention_definition\" src=\"schemas/retention_definition.xsd\"\n      prefix=\"retention_def\" />\n    <schema name=\"record\" src=\"schemas/record.xsd\" prefix=\"record\" />\n    <schema name=\"retention_search\" src=\"schemas/retention_search.xsd\"\n      prefix=\"retention_search\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <doctype name=\"RetentionSearch\" extends=\"SavedSearch\">\n      <facet name=\"ContentViewDisplay\" />\n      <schema name=\"retention_search\" />\n    </doctype>\n\n    <facet name=\"RetentionRule\" perDocumentQuery=\"false\">\n      <schema name=\"retention_rule\" />\n      <schema name=\"retention_definition\" />\n    </facet>\n\n    <facet name=\"Record\">\n      <schema name=\"record\" />\n    </facet>\n\n    <doctype name=\"RetentionRule\" extends=\"Document\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"NotCollectionMember\" />\n      <facet name=\"NXTag\" />\n      <facet name=\"RetentionRule\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n    <doctype name=\"RetentionRules\" extends=\"OrderedFolder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>RetentionRule</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n    <type id=\"RetentionRules\">\n      <label>Retention Rules</label>\n      <icon>/icons/ordered_folder.png</icon>\n      <bigIcon>/icons/ordered_folder_100.png</bigIcon>\n    </type>\n    <type id=\"RetentionRule\">\n      <label>Retention Rules</label>\n      <icon>/icons/retention_rule.png</icon>\n      <bigIcon>/icons/retention_rule.png</bigIcon>\n    </type>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-core-types.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factoryBinding",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.contentTemplate/Contributions/org.nuxeo.retention.contentTemplate--factoryBinding",
              "id": "org.nuxeo.retention.contentTemplate--factoryBinding",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"factoryBinding\" target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n\n    <factoryBinding append=\"true\" factoryName=\"SimpleTemplateRootFactory\" name=\"RetentionRulesFactory\" targetType=\"Root\">\n      <template>\n        <templateItem id=\"RetentionRules\" title=\"RetentionRules\" typeName=\"RetentionRules\">\n          <acl>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"Administrator\"/>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"administrators\"/>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"RecordManager\"/>\n            <ace granted=\"false\" permission=\"Everything\" principal=\"Everyone\"/>\n          </acl>\n        </templateItem>\n      </template>\n    </factoryBinding>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.contentTemplate",
          "name": "org.nuxeo.retention.contentTemplate",
          "requirements": [
            "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib"
          ],
          "resolutionOrder": 729,
          "services": [],
          "startOrder": 715,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.contentTemplate\">\n\n  <require>\n    org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib\n  </require>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\"\n    point=\"factoryBinding\">\n\n    <factoryBinding name=\"RetentionRulesFactory\" factoryName=\"SimpleTemplateRootFactory\"\n      targetType=\"Root\" append=\"true\">\n      <template>\n        <templateItem typeName=\"RetentionRules\" id=\"RetentionRules\" title=\"RetentionRules\" >\n          <acl>\n            <ace principal=\"Administrator\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"administrators\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"RecordManager\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"Everyone\" permission=\"Everything\" granted=\"false\" />\n          </acl>\n        </templateItem>\n      </template>\n    </factoryBinding>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-content-template.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.operations/Contributions/org.nuxeo.retention.operations--operations",
              "id": "org.nuxeo.retention.operations--operations",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.retention.operations.HoldDocument\"/>\n    <operation class=\"org.nuxeo.retention.operations.RetainDocument\"/>\n    <operation class=\"org.nuxeo.retention.operations.UnholdDocument\"/>\n\n    <operation class=\"org.nuxeo.retention.operations.AttachRetentionRule\"/>\n    <operation class=\"org.nuxeo.retention.operations.UnattachRetentionRule\"/>\n\n    <operation class=\"org.nuxeo.retention.operations.FireRetentionEvent\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.operations",
          "name": "org.nuxeo.retention.operations",
          "requirements": [],
          "resolutionOrder": 730,
          "services": [],
          "startOrder": 717,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.operations\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.retention.operations.HoldDocument\" />\n    <operation class=\"org.nuxeo.retention.operations.RetainDocument\" />\n    <operation class=\"org.nuxeo.retention.operations.UnholdDocument\" />\n\n    <operation class=\"org.nuxeo.retention.operations.AttachRetentionRule\" />\n    <operation class=\"org.nuxeo.retention.operations.UnattachRetentionRule\" />\n\n    <operation class=\"org.nuxeo.retention.operations.FireRetentionEvent\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-operations.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.vocabularies/Contributions/org.nuxeo.retention.vocabularies--directories",
              "id": "org.nuxeo.retention.vocabularies--directories",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n    <directory extends=\"template-vocabulary\" name=\"RetentionEnd\">\n      <dataFile>directories/retention_end.csv</dataFile>\n    </directory>\n    <directory extends=\"template-vocabulary\" name=\"RetentionEvent\">\n      <dataFile>directories/retention_event.csv</dataFile>\n    </directory>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.vocabularies",
          "name": "org.nuxeo.retention.vocabularies",
          "requirements": [
            "org.nuxeo.ecm.directories"
          ],
          "resolutionOrder": 731,
          "services": [],
          "startOrder": 722,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.vocabularies\" version=\"1.0\">\n  \n  <require>org.nuxeo.ecm.directories</require>\n  \n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n    <directory extends=\"template-vocabulary\" name=\"RetentionEnd\">\n      <dataFile>directories/retention_end.csv</dataFile>\n    </directory>\n    <directory extends=\"template-vocabulary\" name=\"RetentionEvent\">\n      <dataFile>directories/retention_event.csv</dataFile>\n    </directory>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-vocabularies.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.retention.service.RetentionManagerImpl",
          "declaredStartOrder": 98,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.RetentionService",
          "name": "org.nuxeo.retention.RetentionService",
          "requirements": [
            "org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
            "org.nuxeo.retention.vocabularies",
            "org.nuxeo.ecm.platform.usermanager.UserService"
          ],
          "resolutionOrder": 732,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.retention.RetentionService",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.RetentionService/Services/org.nuxeo.retention.service.RetentionManager",
              "id": "org.nuxeo.retention.service.RetentionManager",
              "overriden": false,
              "version": "2023.4.11"
            }
          ],
          "startOrder": 773,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.RetentionService\">\n  <require>org.nuxeo.ecm.platform.usermanager.UserService</require>\n  <require>org.nuxeo.ecm.platform.usermanager.UserManagerImpl</require>\n  <require>org.nuxeo.retention.vocabularies</require>\n\n  <implementation\n    class=\"org.nuxeo.retention.service.RetentionManagerImpl\" />\n  <service>\n    <provide\n      interface=\"org.nuxeo.retention.service.RetentionManager\" />\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.adapters/Contributions/org.nuxeo.retention.adapters--adapters",
              "id": "org.nuxeo.retention.adapters--adapters",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.retention.adapters.Record\" factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.retention.adapters.RetentionRule\" factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.adapters",
          "name": "org.nuxeo.retention.adapters",
          "requirements": [],
          "resolutionOrder": 733,
          "services": [],
          "startOrder": 713,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.adapters\">\n\n  <extension\n    target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.retention.adapters.Record\"\n      factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\" />\n    <adapter class=\"org.nuxeo.retention.adapters.RetentionRule\"\n      factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-adapters.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.listeners/Contributions/org.nuxeo.retention.listeners--listener",
              "id": "org.nuxeo.retention.listeners--listener",
              "registrationOrder": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.retention.listeners.RetentionDocumentEventListener\" name=\"retentionDocumentEventListener\" postCommit=\"true\">\n    </listener>\n    <listener async=\"true\" class=\"org.nuxeo.retention.listeners.RetentionBusinessEventListener\" name=\"retentionBusinessEventListener\" postCommit=\"true\">\n    </listener>\n    <listener async=\"true\" class=\"org.nuxeo.retention.listeners.RetentionExpiredListener\" name=\"retentionExpiredListener\" postCommit=\"true\">\n      <event>retentionExpired</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.listeners",
          "name": "org.nuxeo.retention.listeners",
          "requirements": [
            "org.nuxeo.retention.RetentionService"
          ],
          "resolutionOrder": 734,
          "services": [],
          "startOrder": 716,
          "version": "2023.4.11",
          "xmlFileContent": "<component name=\"org.nuxeo.retention.listeners\">\n\n  <require>org.nuxeo.retention.RetentionService</require>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"retentionDocumentEventListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.retention.listeners.RetentionDocumentEventListener\">\n    </listener>\n    <listener name=\"retentionBusinessEventListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.retention.listeners.RetentionBusinessEventListener\">\n    </listener>\n    <listener name=\"retentionExpiredListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.retention.listeners.RetentionExpiredListener\">\n      <event>retentionExpired</event>\n    </listener>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-listeners.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.pageprovider.contrib/Contributions/org.nuxeo.retention.pageprovider.contrib--providers",
              "id": "org.nuxeo.retention.pageprovider.contrib--providers",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"manual_retention_rule_suggestion\">\n      <whereClause>\n        <predicate operator=\"=\" parameter=\"retention_rule:docTypes\">\n          <field name=\"docType\"/>\n        </predicate>\n        <fixedPart escapeParameters=\"true\" quoteParameters=\"false\"> dc:title ILIKE '?%' AND ecm:mixinType =\n          'RetentionRule' AND retention_rule:enabled = 1 AND\n          ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"true\" column=\"ecm:pos\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"active_retention_rule\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\"> SELECT\n        * FROM Document WHERE ecm:mixinType = 'RetentionRule' AND\n        retention_rule:enabled = 1 AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"ecm:pos\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"retention_search\">\n      <searchDocumentType>RetentionSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          file:content/name IS NOT NULL\n          AND ecm:isVersion = 0\n          AND ecm:mixinType != 'HiddenInNavigation'\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"retention_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"dc:creator\">\n          <field name=\"dc_creator\" schema=\"retention_search\"/>\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"doc_type_agg\" parameter=\"ecm:primaryType\" type=\"terms\">\n          <field name=\"doc_type_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"rules_agg\" parameter=\"record:ruleIds\" type=\"terms\">\n          <field name=\"rules_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"record_retain_agg\" parameter=\"record:retainUntil\" type=\"date_range\">\n          <field name=\"record_retain_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange fromDate=\"now-24H\" key=\"last24h\" toDate=\"now\"/>\n            <dateRange fromDate=\"now-7d\" key=\"lastWeek\" toDate=\"now-24H\"/>\n            <dateRange fromDate=\"now-1M\" key=\"lastMonth\" toDate=\"now-7d\"/>\n            <dateRange fromDate=\"now-1y\" key=\"lastYear\" toDate=\"now-1M\"/>\n            <dateRange key=\"priorToLastYear\" toDate=\"now-1y\"/>\n          </dateRanges>\n        </aggregate>\n        <aggregate id=\"ecm_retain_agg\" parameter=\"ecm:retainUntil\" type=\"date_range\">\n          <field name=\"ecm_retain_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange fromDate=\"now\" key=\"next24Hours\" toDate=\"now+24H\"/>\n            <dateRange fromDate=\"now+24H\" key=\"beforeAWeek\" toDate=\"now+7d\"/>\n            <dateRange fromDate=\"now+7d\" key=\"beforeAMonth\" toDate=\"now+1M\"/>\n            <dateRange fromDate=\"now+1M\" key=\"beforeAYear\" toDate=\"now+1y\"/>\n            <dateRange fromDate=\"now+1y\" key=\"afterAYear\" toDate=\"now+1000y\"/>\n            <dateRange fromDate=\"now+1000y\" key=\"indeterminate\"/>\n          </dateRanges>\n        </aggregate>\n      </aggregates>\n      <sort ascending=\"true\" column=\"ecm:retainUntil\"/>\n      <quickFilters>\n        <quickFilter name=\"withoutRule\">\n          <clause>record:ruleIds/* IS NULL</clause>\n          <clause>ecm:retainUntil IS NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"withRule\">\n          <clause>record:ruleIds/* IS NOT NULL</clause>\n          <clause>ecm:retainUntil IS NOT NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"hasLegalHold\">\n          <clause>ecm:hasLegalHold = 1</clause>\n        </quickFilter>\n        <quickFilter name=\"hasNotLegalHold\">\n          <clause>ecm:hasLegalHold = 0</clause>\n        </quickFilter>\n        <quickFilter name=\"exceptTrashed\">\n          <clause>ecm:isTrashed = 0</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.pageprovider.contrib",
          "name": "org.nuxeo.retention.pageprovider.contrib",
          "requirements": [],
          "resolutionOrder": 735,
          "services": [],
          "startOrder": 718,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.pageprovider.contrib\">\n  <extension\n    target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider\n      name=\"manual_retention_rule_suggestion\">\n      <whereClause>\n        <predicate parameter=\"retention_rule:docTypes\" operator=\"=\">\n          <field name=\"docType\" />\n        </predicate>\n        <fixedPart quoteParameters=\"false\" escapeParameters=\"true\"> dc:title ILIKE '?%' AND ecm:mixinType =\n          'RetentionRule' AND retention_rule:enabled = 1 AND\n          ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort column=\"ecm:pos\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider\n      name=\"active_retention_rule\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\"> SELECT\n        * FROM Document WHERE ecm:mixinType = 'RetentionRule' AND\n        retention_rule:enabled = 1 AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"ecm:pos\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider name=\"retention_search\"\n      class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <searchDocumentType>RetentionSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          file:content/name IS NOT NULL\n          AND ecm:isVersion = 0\n          AND ecm:mixinType != 'HiddenInNavigation'\n        </fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"retention_search\" name=\"ecm_fulltext\" />\n        </predicate>\n        <predicate parameter=\"dc:creator\" operator=\"IN\">\n          <field schema=\"retention_search\" name=\"dc_creator\" />\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"doc_type_agg\" type=\"terms\" parameter=\"ecm:primaryType\">\n          <field schema=\"retention_search\" name=\"doc_type_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"rules_agg\" type=\"terms\" parameter=\"record:ruleIds\">\n          <field schema=\"retention_search\" name=\"rules_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"record_retain_agg\" type=\"date_range\" parameter=\"record:retainUntil\">\n          <field schema=\"retention_search\" name=\"record_retain_agg\" />\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange key=\"last24h\" fromDate=\"now-24H\" toDate=\"now\"/>\n            <dateRange key=\"lastWeek\" fromDate=\"now-7d\" toDate=\"now-24H\"/>\n            <dateRange key=\"lastMonth\" fromDate=\"now-1M\" toDate=\"now-7d\"/>\n            <dateRange key=\"lastYear\" fromDate=\"now-1y\" toDate=\"now-1M\"/>\n            <dateRange key=\"priorToLastYear\" toDate=\"now-1y\"/>\n          </dateRanges>\n        </aggregate>\n        <aggregate id=\"ecm_retain_agg\" type=\"date_range\" parameter=\"ecm:retainUntil\">\n          <field schema=\"retention_search\" name=\"ecm_retain_agg\" />\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange key=\"next24Hours\" fromDate=\"now\" toDate=\"now+24H\"/>\n            <dateRange key=\"beforeAWeek\" fromDate=\"now+24H\" toDate=\"now+7d\"/>\n            <dateRange key=\"beforeAMonth\" fromDate=\"now+7d\" toDate=\"now+1M\"/>\n            <dateRange key=\"beforeAYear\" fromDate=\"now+1M\" toDate=\"now+1y\"/>\n            <dateRange key=\"afterAYear\" fromDate=\"now+1y\" toDate=\"now+1000y\"/>\n            <dateRange key=\"indeterminate\" fromDate=\"now+1000y\"/>\n          </dateRanges>\n        </aggregate>\n      </aggregates>\n      <sort column=\"ecm:retainUntil\" ascending=\"true\" />\n      <quickFilters>\n        <quickFilter name=\"withoutRule\">\n          <clause>record:ruleIds/* IS NULL</clause>\n          <clause>ecm:retainUntil IS NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"withRule\">\n          <clause>record:ruleIds/* IS NOT NULL</clause>\n          <clause>ecm:retainUntil IS NOT NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"hasLegalHold\">\n          <clause>ecm:hasLegalHold = 1</clause>\n        </quickFilter>\n        <quickFilter name=\"hasNotLegalHold\">\n          <clause>ecm:hasLegalHold = 0</clause>\n        </quickFilter>\n        <quickFilter name=\"exceptTrashed\">\n          <clause>ecm:isTrashed = 0</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-pageproviders.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.schedulers/Contributions/org.nuxeo.retention.schedulers--schedule",
              "id": "org.nuxeo.retention.schedulers--schedule",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n    <schedule id=\"findRetentionExpired\">\n      <eventId>findRetentionExpired</eventId>\n      <!-- every hour -->\n      <cronExpression>0 0 * * * ?</cronExpression>\n    </schedule>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.schedulers",
          "name": "org.nuxeo.retention.schedulers",
          "requirements": [],
          "resolutionOrder": 736,
          "services": [],
          "startOrder": 719,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.schedulers\">\n    \n  <extension target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\" point=\"schedule\">\n    <schedule id=\"findRetentionExpired\">\n      <eventId>findRetentionExpired</eventId>\n      <!-- every hour -->\n      <cronExpression>0 0 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-schedulers.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.security/Contributions/org.nuxeo.retention.security--permissions",
              "id": "org.nuxeo.retention.security--permissions",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"ManageRecord\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>SetRetention</include>\n      <include>UnsetRetention</include>\n    </permission>\n\n    <permission name=\"ManageLegalHold\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>ManageLegalHold</include>\n    </permission>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.security/Contributions/org.nuxeo.retention.security--permissionsVisibility",
              "id": "org.nuxeo.retention.security--permissionsVisibility",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility>\n      <item order=\"70\" show=\"true\">ManageRecord</item>\n      <item order=\"71\" show=\"true\">ManageLegalHold</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.security",
          "name": "org.nuxeo.retention.security",
          "requirements": [
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 737,
          "services": [],
          "startOrder": 720,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.security\">\n\n  <require>org.nuxeo.ecm.core.security.defaultPermissions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissions\">\n\n    <permission name=\"ManageRecord\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>SetRetention</include>\n      <include>UnsetRetention</include>\n    </permission>\n\n    <permission name=\"ManageLegalHold\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>ManageLegalHold</include>\n    </permission>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility>\n      <item show=\"true\" order=\"70\">ManageRecord</item>\n      <item show=\"true\" order=\"71\">ManageLegalHold</item>\n    </visibility>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-security.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions/Contributions/org.nuxeo.retention.actions--actions",
              "id": "org.nuxeo.retention.actions--actions",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/holdDocumentsAction\" name=\"holdDocumentsAction\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/unholdDocumentsAction\" name=\"unholdDocumentsAction\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/attachRetentionRule\" name=\"attachRetentionRule\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/evalInputEventBasedRule\" name=\"evalInputEventBasedRule\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions/Contributions/org.nuxeo.retention.actions--streamProcessor",
              "id": "org.nuxeo.retention.actions--streamProcessor",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.retention.actions.HoldDocumentsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"holdDocumentsAction\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.UnholdDocumentsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"unholdDocumentsAction\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.AttachRetentionRuleAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"attachRetentionRule\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.EvalInputEventBasedRuleAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"evalInputEventBasedRule\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions",
          "name": "org.nuxeo.retention.actions",
          "requirements": [],
          "resolutionOrder": 738,
          "services": [],
          "startOrder": 712,
          "version": "2023.4.11",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.actions\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"holdDocumentsAction\" inputStream=\"retention/holdDocumentsAction\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"unholdDocumentsAction\" inputStream=\"retention/unholdDocumentsAction\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"attachRetentionRule\" inputStream=\"retention/attachRetentionRule\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"evalInputEventBasedRule\" inputStream=\"retention/evalInputEventBasedRule\" bucketSize=\"100\" batchSize=\"20\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"holdDocumentsAction\" class=\"org.nuxeo.retention.actions.HoldDocumentsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.holdDocumentsAction.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.holdDocumentsAction.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"unholdDocumentsAction\" class=\"org.nuxeo.retention.actions.UnholdDocumentsAction\"\n        defaultConcurrency=\"${nuxeo.bulk.action.unholdDocumentsAction.defaultConcurrency:=2}\"\n        defaultPartitions=\"${nuxeo.bulk.action.unholdDocumentsAction.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"attachRetentionRule\" class=\"org.nuxeo.retention.actions.AttachRetentionRuleAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.attachRetentionRule.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.attachRetentionRule.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"evalInputEventBasedRule\" class=\"org.nuxeo.retention.actions.EvalInputEventBasedRuleAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.evalInputEventBasedRule.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.evalInputEventBasedRule.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-actions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.audit/Contributions/org.nuxeo.retention.audit--event",
              "id": "org.nuxeo.retention.audit--event",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.4.11",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"retentionRuleAttached\"/>\n    <event name=\"afterSetRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterExtendRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterUnsetRetention\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.audit",
          "name": "org.nuxeo.retention.audit",
          "requirements": [],
          "resolutionOrder": 739,
          "services": [],
          "startOrder": 714,
          "version": "2023.4.11",
          "xmlFileContent": "<component name=\"org.nuxeo.retention.audit\" version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <event name=\"retentionRuleAttached\" />\n    <event name=\"afterSetRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterExtendRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterUnsetRetention\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-audit.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-retention-2023.4.11.jar",
      "groupId": "org.nuxeo.retention",
      "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core",
      "id": "org.nuxeo.retention.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.9.6\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.12\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-retention-service\r\nBundle-SymbolicName: org.nuxeo.retention.core;singleton=true\r\nNuxeo-Component: OSGI-INF/retention-service-framework.xml,OSGI-INF/reten\r\n tion-core-types.xml,OSGI-INF/retention-content-template.xml,OSGI-INF/re\r\n tention-operations.xml,OSGI-INF/retention-vocabularies.xml,OSGI-INF/ret\r\n ention-adapters.xml,OSGI-INF/retention-listeners.xml,OSGI-INF/retention\r\n -pageproviders.xml,OSGI-INF/retention-schedulers.xml,OSGI-INF/retention\r\n -security.xml,OSGI-INF/retention-actions.xml,OSGI-INF/retention-audit.x\r\n ml\r\n\r\n",
      "maxResolutionOrder": 739,
      "minResolutionOrder": 728,
      "packages": [
        "nuxeo-retention"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
        "digest": "34dbcd043cd41c527a2929521f1fa815",
        "encoding": "UTF-8",
        "length": 6308,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.4.11"
    }
  ],
  "creationDate": 1738062879135,
  "key": "Nuxeo Platform-2023.25",
  "name": "Nuxeo Platform",
  "operations": [
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Turn the input document into a record and set a legal hold on it. Returns back the hold document.",
      "hierarchyPath": "/op:Document.Hold",
      "label": "Apply Legal Hold",
      "name": "Document.Hold",
      "operationClass": "org.nuxeo.retention.operations.HoldDocument",
      "params": [
        {
          "description": "Optional description of the hold",
          "isRequired": false,
          "name": "description",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Document.Hold",
      "version": "2023.25.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Turn the input document into a record and retain it until the until date. Returns back the retained document.",
      "hierarchyPath": "/op:Document.Retain",
      "label": "Set as Record and Retain Until",
      "name": "Document.Retain",
      "operationClass": "org.nuxeo.retention.operations.RetainDocument",
      "params": [
        {
          "description": "If true and if the document is not already a record, it will be turned into a flexible record, enforced otherwise",
          "isRequired": false,
          "name": "flexible",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "If empty, the input document will be retained indeterminately",
          "isRequired": false,
          "name": "until",
          "order": 0,
          "type": "date",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Document.Retain",
      "version": "2023.25.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": " Unattaches the retention rule on a flexible Record document. Stops the current retention on the record document. Returns back the unretained record document.",
      "hierarchyPath": "/op:Document.UnattachRetentionRule",
      "label": "Unattach Retention Rule and stop retention",
      "name": "Document.UnattachRetentionRule",
      "operationClass": "org.nuxeo.retention.operations.UnattachRetentionRule",
      "params": [],
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Document.UnattachRetentionRule",
      "version": "2023.25.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Remove a legal hold on the input document. Returns back the unhold document.",
      "hierarchyPath": "/op:Document.Unhold",
      "label": "Remove Legal Hold",
      "name": "Document.Unhold",
      "operationClass": "org.nuxeo.retention.operations.UnholdDocument",
      "params": [],
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Document.Unhold",
      "version": "2023.25.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Attach the given retention rule to the input document. The document becomes a record and the main blob cannot be updated",
      "hierarchyPath": "/op:Retention.AttachRule",
      "label": "Attach Retention Rule",
      "name": "Retention.AttachRule",
      "operationClass": "org.nuxeo.retention.operations.AttachRetentionRule",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "rule",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Retention.AttachRule",
      "version": "2023.25.10"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Fire a retention business related event. The record needs to be attached to a event based retention rule",
      "hierarchyPath": "/op:Retention.FireEvent",
      "label": "Fire Retention Event",
      "name": "Retention.FireEvent",
      "operationClass": "org.nuxeo.retention.operations.FireRetentionEvent",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "audit",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "void"
      ],
      "url": "Retention.FireEvent",
      "version": "2023.25.10"
    }
  ],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.retention.core",
        "nuxeo-retention-web"
      ],
      "conflicts": [],
      "dependencies": [
        "nuxeo-web-ui"
      ],
      "hierarchyPath": "/nuxeo-retention-2023.4.11",
      "id": "nuxeo-retention-2023.4.11",
      "name": "nuxeo-retention",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Retention",
      "version": "2023.4.11"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1738062879135,
  "version": "2023.25"
}